home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / WFC010.ZIP / SRC / CURL.CPP < prev    next >
C/C++ Source or Header  |  1995-12-07  |  6KB  |  264 lines

  1. #include <wfc.h>
  2. #pragma hdrstop
  3.  
  4. /*
  5. ** Author: Samuel R. Blackburn
  6. ** CI$: 76300,326
  7. ** Internet: sammy@sed.csc.com
  8. **
  9. ** You can use it any way you like as long as you don't try to sell it.
  10. **
  11. ** Any attempt to sell WFC in source code form must have the permission
  12. ** of the original author. You can produce commercial executables with
  13. ** WFC but you can't sell WFC.
  14. **
  15. ** Copyright, 1995, Samuel R. Blackburn
  16. **
  17. ** $Workfile: $
  18. ** $Revision: $
  19. ** $Modtime: $
  20. */
  21.  
  22. #if defined( _DEBUG )
  23. #undef THIS_FILE
  24. static char BASED_CODE THIS_FILE[] = __FILE__;
  25. #endif
  26.  
  27. IMPLEMENT_SERIAL( CUniformResourceLocator, CObject, 1 );
  28.  
  29. #if defined( _DEBUG )
  30. #define new DEBUG_NEW
  31. #endif
  32.  
  33. CUniformResourceLocator::CUniformResourceLocator()
  34. {
  35.    Empty();
  36. }
  37.  
  38. CUniformResourceLocator::CUniformResourceLocator( const CUniformResourceLocator& source )
  39. {
  40.    Copy( source );
  41. }
  42.  
  43. CUniformResourceLocator::CUniformResourceLocator( const CUniversalNamingConvention& source )
  44. {
  45.    Copy( source );
  46. }
  47.  
  48. CUniformResourceLocator::CUniformResourceLocator( LPCTSTR source )
  49. {
  50.    Copy( source );
  51. }
  52.  
  53. CUniformResourceLocator::~CUniformResourceLocator()
  54. {
  55.    Empty();
  56. }
  57.  
  58. int CUniformResourceLocator::Compare( const CUniformResourceLocator& source )
  59. {
  60.    ASSERT_VALID( this );
  61.  
  62.    return( URL.CompareNoCase( source.URL ) );
  63. }
  64.  
  65. void CUniformResourceLocator::Copy( const CUniformResourceLocator& source )
  66. {
  67.    ASSERT_VALID( this );
  68.  
  69.    ProtocolName = source.ProtocolName;
  70.    MachineName  = source.MachineName;
  71.    PathName     = source.PathName;
  72.    PortName     = source.PortName;
  73.    URL          = source.URL;
  74. }
  75.  
  76. void CUniformResourceLocator::Copy( const CUniversalNamingConvention& source )
  77. {
  78.    ASSERT_VALID( this );
  79.  
  80.    Empty();
  81.  
  82.    ProtocolName = "file";
  83.    MachineName  = source.ServerName;
  84.    PathName     = source.ShareName;
  85.    PathName    += "/";
  86.    PathName    += source.PathName;
  87.  
  88.    /*
  89.    ** Now go through PathName to make sure it has /'s instead of \'s
  90.    */
  91.  
  92.    int location_of_slash = 0;
  93.  
  94.    while( location_of_slash < PathName.GetLength() )
  95.    {
  96.       if ( PathName[ location_of_slash ] == '\\' )
  97.       {
  98.          PathName.SetAt( location_of_slash, '/' );
  99.       }
  100.  
  101.       location_of_slash++;
  102.    }
  103.  
  104.    Make();
  105. }
  106.  
  107. void CUniformResourceLocator::Copy( LPCTSTR source )
  108. {
  109.    ASSERT_VALID( this );
  110.    ASSERT( source != NULL );
  111.  
  112.    Empty();
  113.  
  114.    if ( source == NULL )
  115.    {
  116.       return;
  117.    }
  118.  
  119.    CString temp_string = source;
  120.  
  121.    int location = temp_string.Find( ':' );
  122.  
  123.    if ( location == (-1) )
  124.    {
  125.       return;
  126.    }
  127.  
  128.    ProtocolName = temp_string.Left( location );
  129.  
  130.    temp_string = temp_string.Right( ( temp_string.GetLength() - location ) - 1 );
  131.  
  132.    while( temp_string[ 0 ] == '/' )
  133.    {
  134.       temp_string = temp_string.Right( temp_string.GetLength() - 1 );
  135.    }
  136.  
  137.    location = temp_string.Find( '/' );
  138.  
  139.    if ( location == (-1) )
  140.    {
  141.       MachineName = temp_string;
  142.    }
  143.    else
  144.    {
  145.       MachineName = temp_string.Left( location );
  146.       PathName    = temp_string.Right( ( temp_string.GetLength() - location ) - 1 );
  147.    }
  148.  
  149.    /*
  150.    ** Now see if MachineName has a PortName in it
  151.    */
  152.  
  153.    location = MachineName.Find( ':' );
  154.  
  155.    if ( location != (-1) )
  156.    {
  157.       PortName    = MachineName.Right( ( MachineName.GetLength() - location ) - 1 );
  158.       MachineName = MachineName.Left( location );
  159.    }
  160.  
  161.    Make();
  162. }
  163.  
  164. void CUniformResourceLocator::Empty( void )
  165. {
  166.    ASSERT_VALID( this );
  167.  
  168.    ProtocolName.Empty();
  169.    MachineName.Empty();
  170.    PathName.Empty();
  171.    PortName.Empty();
  172.    URL.Empty();
  173. }
  174.  
  175. void CUniformResourceLocator::Make( void )
  176. {
  177.    ASSERT_VALID( this );
  178.  
  179.    URL  = ProtocolName;
  180.    URL += "://";
  181.    URL += MachineName;
  182.  
  183.    if ( PortName != "" )
  184.    {
  185.       URL += ":";
  186.       URL += PortName;
  187.    }
  188.  
  189.    URL += "/";
  190.    URL += PathName;
  191. }
  192.  
  193. void CUniformResourceLocator::Serialize( CArchive& archive )
  194. {
  195.    CObject::Serialize( archive );
  196.  
  197.    if ( archive.IsStoring() )
  198.    {
  199.       archive << ProtocolName;
  200.       archive << MachineName;
  201.       archive << PathName;
  202.       archive << PortName;
  203.       archive << URL;
  204.    }
  205.    else
  206.    {
  207.       archive >> ProtocolName;
  208.       archive >> MachineName;
  209.       archive >> PathName;
  210.       archive >> PortName;
  211.       archive >> URL;
  212.    }
  213. }
  214.  
  215. CUniformResourceLocator& CUniformResourceLocator::operator = ( const CUniformResourceLocator& source )
  216. {
  217.    ASSERT_VALID( this );
  218.    Copy( source );
  219.    return( *this );
  220. }
  221.  
  222. CUniformResourceLocator& CUniformResourceLocator::operator = ( const CUniversalNamingConvention& source )
  223. {
  224.    ASSERT_VALID( this );
  225.    Copy( source );
  226.    return( *this );
  227. }
  228.  
  229. CUniformResourceLocator& CUniformResourceLocator::operator = ( LPCTSTR source )
  230. {
  231.    ASSERT_VALID( this );
  232.    Copy( source );
  233.    return( *this );
  234. }
  235.  
  236. BOOL CUniformResourceLocator::operator == ( const CUniformResourceLocator& right_url )
  237. {
  238.    ASSERT_VALID( this );
  239.  
  240.    if ( Compare( right_url ) == 0 )
  241.    {
  242.       return( TRUE );
  243.    }
  244.    else
  245.    {
  246.       return( FALSE );
  247.    }
  248. }
  249.  
  250. #if defined( _DEBUG )
  251.  
  252. void CUniformResourceLocator::Dump( CDumpContext& dump_context ) const
  253. {
  254.    CObject::Dump( dump_context );
  255.  
  256.    dump_context << "ProtocolName = \"" << ProtocolName << "\"\n";
  257.    dump_context << "MachineName = \"" << MachineName << "\"\n";
  258.    dump_context << "PathName = \"" << PathName << "\"\n";
  259.    dump_context << "PortName = \"" << PortName << "\"\n";
  260.    dump_context << "URL = \"" << URL << "\"\n";
  261. }
  262.  
  263. #endif // _DEBUG
  264.